home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Forever 4
/
Atari Forever 4.zip
/
Atari Forever 4.iso
/
PD_THEMA
/
EDITOREN
/
JANE_152
/
MAKROS
/
DIR.SCL
next >
Wrap
Text File
|
1998-03-14
|
2KB
|
69 lines
# Diese Zeile ist erforderlich, damit der Aufruf von 'dlist' in 'main'
# den Compiler nicht verwirrt.
forward dlist(path, prefix);
# Einfache Testumgebung für den Makro 'dlist'
main()
{ lprint("Bitte geben Sie den Namen des Wurzelordners ein:");
wurzel = inputline();
if ( wurzel != '' )
{ dlist(wurzel // '\*', '');
}
}
# Dieser Makro gibt den Inhalt eines Ordners in das 'SCEleton-Fenster' aus. Dabei
# werden auch alle Unterordner dieses Ordners angezeigt. Die Schachtelung wird durch
# Einrückung kenntlich gemacht.
# Dieser makro demonstriert die Verzeichnsfunktionen 'Fsfirst' und 'Fsnext'
# sowie eine praktische Anwendung der Rekursion in SCEleton.
dlist(path, prefix)
{
# Wenn 'prefix' leer ist, dann sind wir auf der obersten Ebene,
# also Überschrift ausgeben.
if ( prefix == '' )
lprint("Dateibaum ab %s:", path);
# Jetzt fängt die Suche nach passenden Dateien an.
l = Fsfirst(path);
# Zuerst testen, ob überhaupt etwas gefinden wurde.
if ( l != $$$ )
{
# Falls ja, dann fängt die Suchschleife an.
do
{
# Datum und Uhrzeit von Sekundenzahl in lesbaren Text wandeln.
str = formattime(l[3], "%X %x");
# Alle erhaltenen Informationen über die Datei ausgeben:
# Namen, Ordnerkennung, Größe, Datum, Uhrzeit, Attribute.
# Dabei wird dem Namen 'prefix' vorangestellt, um die Einrückung zu erzeugen.
lprint("%-40s %1d %10d %17s %2x", prefix // l[0], l[1], l[2], str, l[4]);
# Testen, ob die Datei ein Ordner war.
if ( l[1] == 1 )
{
# Falls ja, den Namen an den Suchpfad anhängen, um diesen Ordner
# durchsuchen zu können.
l2 = splitname(path);
l2[0] = l2[0] // '\' // l[0];
p2 = makename(l2[0], l2[1], l2[2]);
# Jetzt wird dieser Ordner durch einen rekursiven Selbstaufruf von 'dlist'
# angezeigt. Dabei wird 'prefix' um ein Leerzeichen verlängert, damit der
# Ordnerinhalt tiefer eingerückt ist.
dlist(p2, prefix // ' ');
}
# Die nächste Datei im aktuellen Ordner suchen.
l = Fsnext();
}
# Wenn die Rückgabe leer ist, dann gibt es nichts mehr.
while ( l != $$$ );
}
# Falls wir auf der obersten Ebene sind, Ende der Liste anzeigen.
if ( prefix == '' )
lprint('*** Ende ***');
}